package dir

import (
	"hft/Database/admin/file"
	"hft/Http/Models/request"
	"hft/Http/Services/dir"
	utils "hft/Http/Utils"
	"hft/e"
	"hft/tools"
	"strconv"

	"github.com/gin-gonic/gin"
)

type Dir struct{}

func (*Dir) List(c *gin.Context) {

	pid, _ := strconv.Atoi(c.Query("pid"))

	if pid <= -1 {
		utils.FailWithMessage(e.InValidInfo, c)
		return
	}

	claims, err := tools.GetClaims(c)

	if err != nil {
		utils.FailWithMessage(e.InValidToken, c)
		return
	}

	list, err := dir.DirService.List(claims.BaseClaims, pid)

	if err != nil {
		utils.FailWithMessage(err.Error(), c)
	}

	utils.OkWithData(list, c)

}

// 添加目录
func (*Dir) Add(c *gin.Context) {
	var data *file.Dir
	c.ShouldBindJSON(&data)

	claims, err := tools.GetClaims(c)
	if err != nil {
		utils.FailWithMessage(e.InValidToken, c)
		return
	}

	err = dir.DirService.Add(claims.BaseClaims, data)
	if err != nil {
		utils.FailWithMessage(err.Error(), c)
		return
	}
	utils.Ok(c)
}

// 编辑目录
func (*Dir) Edit(c *gin.Context) {
	var data *file.Dir
	c.ShouldBindJSON(&data)
	claims, err := tools.GetClaims(c)
	if err != nil {
		utils.FailWithMessage(e.InValidToken, c)
		return
	}
	err = dir.DirService.Edit(claims.BaseClaims, data)
	if err != nil {
		utils.FailWithMessage(err.Error(), c)
		return
	}
	utils.Ok(c)
}

// 删除
func (*Dir) Delete(c *gin.Context) {
	var ids request.IDS
	c.ShouldBindJSON(&ids)
	claims, err := tools.GetClaims(c)

	if err != nil {
		utils.FailWithMessage(e.InValidToken, c)
		return
	}

	err = dir.DirService.Delete(claims.BaseClaims, ids.IDS[0])
	if err != nil {
		utils.FailWithMessage(err.Error(), c)
	}
	utils.Ok(c)
}

var DirController = new(Dir)
